/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.12.16
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   寄存器指令属性编辑视窗
*                                                                         *
 ***************************************************************************/
#ifndef REGISTERINSTRUCTIONVIEW_H
#define REGISTERINSTRUCTIONVIEW_H

#include "registerinstructionview_global.h"
#include <QWidget>
#include <QTranslator>

class ProgramView;

namespace Ui {
class RegisterInstructionView;
}

/**
 * @brief The EM_REGISTER_TYPE enum　寄存器类型
 */
enum EM_REGISTER_TYPE
{
    EM_REGISTER_TYPE_R = 1,
    EM_REGISTER_TYPE_GR = 2,
    EM_REGISTER_TYPE_PR_I = 3,
    EM_REGISTER_TYPE_PR_IJ = 4,
    EM_REGISTER_TYPE_PL = 5
};

/**
 * @brief The RegisterInstructionView class　寄存器指令属性编辑视窗类
 */
class REGISTERINSTRUCTIONVIEWSHARED_EXPORT RegisterInstructionView : public QWidget
{
    Q_OBJECT

public:
    RegisterInstructionView(int styleId,QWidget *parent = 0);

    /**
     * @brief updateView　更新设置数据到界面控件上
     */
    void updateView();
    /**
     * @brief getInput　获取界面输入数据
     */
    void getInput();

    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);

private:
    QTranslator translator;

public:
    ProgramView *programView;

    /**
     * @brief instruction　寄存器指令
     */
    QString instruction;

    /**
     * @brief selectRegisterType　选择寄存器类型
     *
     * 1:R[i]  2:GR[i]  3:PR[i]  4:PR[i, j]  5PL[i]
     */
    int selectRegisterType;

    /**
     * @brief rIndex　R寄存器号码
     */
    QString rIndex;
    /**
     * @brief gRIndex　GR寄存器号码
     */
    QString gRIndex;
    /**
     * @brief pRndex　PR寄存器号码
     */
    QString pRIndex;
    /**
     * @brief pLIndex　PL寄存器号码
     */
    QString pLIndex;
    /**
     * @brief rValue　R寄存器操作值
     */
    QString rValue;
    /**
     * @brief gRValue　GR寄存器操作值
     */
    QString gRValue;
    /**
     * @brief pRIValue　PR[i]寄存器操作值
     */
    QString pRIValue;
    /**
     * @brief pRIJValue　PR[i,j]寄存器操作值
     */
    QString pRIJValue;

    /**
     * @brief iIndex　PR寄存器号码
     */
    QString iIndex;
    /**
     * @brief jIndex　PR寄存器要素号码
     */
    QString jIndex;

    /**
     * @brief plElement1　栈板寄存器要素１
     */
    QString plElement1;
    /**
     * @brief plElement2　栈板寄存器要素２
     */
    QString plElement2;
    /**
     * @brief plElement3　栈板寄存器要素３
     */
    QString plElement3;

    /**
     * @brief note　指令注释
     */
    QString note;

signals:
    /**
     * @brief selectRInstruction　选择R寄存器指令
     */
    void selectRInstruction();
    /**
     * @brief selectGRInstruction　选择GR寄存器指令
     */
    void selectGRInstruction();
    /**
     * @brief selectPRInstruction　选择PR寄存器指令
     */
    void selectPRInstruction();
    /**
     * @brief selectPRijInstruction　选择PR寄存器要素指令
     */
    void selectPRijInstruction();
    /**
     * @brief selectPLInstruction　选择PL寄存器指令
     */
    void selectPLInstruction();

    /**
     * @brief clearNote　清除指令注释
     */
    void clearNote();
    /**
     * @brief finishEditInstruction　完成指令编辑
     */
    void finishEditInstruction();
    /**
     * @brief saveInstruction　保存编辑指令
     * @param instruction　寄存器指令
     */
    void saveInstruction(QString instruction);

private slots:
    /**
     * @brief on_R_radioButton_clicked　选择R寄存器指令槽函数
     */
    void on_R_radioButton_clicked();
    /**
     * @brief on_GR_radioButton_clicked　选择GR寄存器指令槽函数
     */
    void on_GR_radioButton_clicked();
    /**
     * @brief on_PR_radioButton_clicked　选择PR寄存器指令槽函数
     */
    void on_PR_radioButton_clicked();
    /**
     * @brief on_PRij_radioButton_clicked　选择PR寄存器要素指令槽函数
     */
    void on_PRij_radioButton_clicked();
    /**
     * @brief on_PL_radioButton_clicked　选择PL寄存器指令槽函数
     */
    void on_PL_radioButton_clicked();
    /**
     * @brief on_clearNote_Btn_clicked　清除指令注释槽函数
     */
    void on_clearNote_Btn_clicked();
    /**
     * @brief on_forward_Btn_clicked　上一页槽函数
     */
    void on_forward_Btn_clicked();
    /**
     * @brief on_save_Btn_clicked　保存指令槽函数
     */
    void on_save_Btn_clicked();

private:
    Ui::RegisterInstructionView *ui;
};

#endif // REGISTERINSTRUCTIONVIEW_H
